/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package persistencia;

import java.util.List;
import modelo.HibernateUtil;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import pojos.Facturas;

/**
 *
 * @author dam2a
 */
public class FacturasDAO {
    
    private Session sesion;
    private Transaction tx;
    
    private void iniciaOperacion() throws HibernateException {
        sesion = HibernateUtil.getSessionFactory().openSession();
        tx = sesion.beginTransaction();
    }
    
    private void manejaExcepcion(HibernateException he) throws HibernateException {
        tx.rollback();
        throw new HibernateException("Error en la capa de acceso a datos", he);
    }
    public void deleteFactura(String idFactura){
        int aux;
        Facturas factura;
        try{
            iniciaOperacion();
            factura = (Facturas) sesion.get(Facturas.class, idFactura);
            sesion.delete(factura);
            tx.commit();
        }catch(HibernateException e){
            System.out.println("Error de hibernate al intentar borrar una factura: "+e.getMessage());
        }finally{
            sesion.close();
        }     
    }
    
    public List<Facturas> getFacturas()
    {
        List<Facturas> listaFacturas;
        
        iniciaOperacion();
        listaFacturas=sesion.createQuery("FROM Facturas").list();
        sesion.close();
         
        return listaFacturas;
    }

    public List<Facturas> getFacturasPorId(String codFactura) {
        List<Facturas> listaFacturas;
        
        iniciaOperacion();
        listaFacturas=sesion.createQuery("FROM Facturas WHERE codFactura="+codFactura).list();
        sesion.close();
         
        return listaFacturas;
    }

    public List<Facturas> getFacturasPorAlbaran(String codAlbaran) {
        List<Facturas> listaFacturas;
        
        iniciaOperacion();
        listaFacturas=sesion.createQuery("FROM Facturas WHERE albaran.codAlbaran="+codAlbaran).list();
        sesion.close();
         
        return listaFacturas;
    }

    public List<Facturas> getFacturasPorCliente(String idCliente) {
        List<Facturas> listaFacturas;
        
        iniciaOperacion();
        listaFacturas=sesion.createQuery("FROM Facturas WHERE cliente.idCliente="+idCliente).list();
        sesion.close();
         
        return listaFacturas;
    }

    public List<Facturas> getFacturasPorImporte(String importe) {
        List<Facturas> listaFacturas;
        
        iniciaOperacion();
        listaFacturas=sesion.createQuery("FROM Facturas WHERE importeTotal="+importe).list();
        sesion.close();
         
        return listaFacturas;
    }

    
     public void updateFacturas(Facturas factura)
    {
        iniciaOperacion();
        sesion.update(factura);
        tx.commit();
        sesion.close();
    }

    public Facturas getFacturaPorId(String idFactura) {
        Facturas factura;
        
        iniciaOperacion();
        factura=(Facturas) sesion.createQuery("FROM Facturas WHERE codFactura="+idFactura).uniqueResult();
        sesion.close();
         
        return factura;
    }
    
    
    
    
    
}
